// Ionic Starter App

// angular.module is a global place for creating, registering and retrieving Angular modules
// 'starter' is the name of this angular module example (also set in a <body> attribute in index.html)
// the 2nd parameter is an array of 'requires'
// 'starter.services' is found in services.js
// 'starter.controllers' is found in controllers.js
angular.module('starter', ['ionic', 'starter.controllers', 'starter.services'])
  .constant('ApiEndpoint', {
    url: 'http://localhost:8000'
  })
  .constant('AUTH_EVENTS', {
    loginSuccess: 'auth-login-success',
    loginFailed: 'auth-login-failed',
    logoutSuccess: 'auth-logout-success',
    sessionTimeout: 'auth-session-timeout',
    notAuthenticated: 'auth-not-authenticated',
    notAuthorized: 'auth-not-authorized'
  })

  .run(function ($ionicPlatform, $rootScope, $state, $location) {
    $ionicPlatform.ready(function () {
      // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
      // for form inputs)
      if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {
        cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
        cordova.plugins.Keyboard.disableScroll(true);

      }
      if (window.StatusBar) {
        // org.apache.cordova.statusbar required
        StatusBar.styleDefault();
      }
    });
  })

  .config(function ($stateProvider, $urlRouterProvider, $httpProvider) {
    $httpProvider.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

    // Ionic uses AngularUI Router which uses the concept of states
    // Learn more here: https://github.com/angular-ui/ui-router
    // Set up the various states which the app can be in.
    // Each state's controller can be found in controllers.js
    $stateProvider
      .state('login', {
        url: '/login',

        templateUrl: 'templates/tab-login.html',
        controller: 'LoginCtrl'

      })
      // setup an abstract state for the tabs directive
      .state('tab', {
        url: '/',
        abstract: true,
        templateUrl: 'templates/tabs.html'
      })

      // Each tab has its own nav history stack:


      .state('tab.chats', {
        url: 'chats',
        views: {
          'tab-chats': {
            templateUrl: 'templates/tab-chats.html',
            controller: 'ChatsCtrl'
          }
        }
      })
      .state('tab.chat-detail', {
        url: 'chats/:chatId',
        views: {
          'tab-chats': {
            templateUrl: 'templates/chat-detail.html',
            controller: 'ChatDetailCtrl'
          }
        }
      })

      .state('tab.account', {
        url: 'account',
        views: {
          'tab-account': {
            templateUrl: 'templates/tab-account.html',
            controller: 'AccountCtrl'
          }
        }
      });

    // if none of the above states are matched, use this as the fallback
    $urlRouterProvider.otherwise('/tab/login');

  }).run(function ($ionicPlatform, $rootScope, $state, $location) {

  $rootScope.authenticated = false;

  // 参考： http://www.w3cfuns.com/notes/15182/158b0867e5be8188adab3bb0f8f8b329.html
  // 访问以下state前，都需要判断下是否已经登录过，如果没有登录，则跳转到登录
  var needLoginView = ["tab.account"];//需要登录的页面state
  $rootScope.$on('$stateChangeStart', function (event, toState, toParams, fromState, fromParams, options) {

    console.log('FROM: ' + fromState.name);
    console.log('TO: ' + toState.name);
    console.log($rootScope.authenticated);
    // console.log(event);

    //判断当前未登录，且访问了需要登陆的state
    if (needLoginView.indexOf(toState.name) >= 0 && !$rootScope.authenticated) {
      event.preventDefault(); //阻止默认事件，即原本页面的加载, 使用event.preventDefault()可以阻止模板解析的发生
      $state.go("login");//跳转到登录页
    }
  })

});
